<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>


    <script>

        // Number 类型表示整数和浮点数

        console.log(Number(3))

        // 函数

        console.log(Number.isInteger(2.3)) // false
        console.log(232.326.toFixed(2)) // 22.35
        // NaN 无效值
        console.log(Number("adf"))
        console.log(Number("adf") == NaN)  // false,所以 NaN不能用比较运算符
        console.log(Number.isNaN(Number("adf"))) // true


        // 类型转换为Number
        console.log(Number("222")) // 222
        console.log(Number(false)) // 0
        console.log(Number(null)) // 0
        console.log(Number({})) // NaN
        console.log(Number([])) // 0
        console.log(Number(undefined)) // NaN

        console.log(parseInt("333")) //333
        console.log(parseInt(" 000333   ")) //333
        console.log(parseInt("333.633")) //333 截断

        console.log(23.255.toFixed(2)) // 23.25, 这种保留小数点位数的做法并不传统的四舍五入，但是对于一般的场景是够用了


        console.log(0.1 + 0.2) // 0.30000000000000004
        console.log(typeof (0.1 + 0.2)) // number
        console.log((0.1).toString(2)) // 0.0001100110011001100110011001100110011001100110011001101
        // 精度问题的解决方法
        console.log((0.1 + 0.2).toFixed(1)) // 0.3
        // 将小数转为整数进行计算后，再转为小数
        Number.prototype.add = function (num) {
            //取两个数值中小数位最大的
            let n1 = this.toString().split('.')[1].length
            let n2 = num.toString().split('.')[1].length

            //得到10的N次幂
            let m = Math.pow(10, Math.max(n1, n2))

            return (this * m + num * m) / m
        }
        console.log((0.1).add(0.2)) /// 0.3
        // 使用库 mathjs 、decimal.js 等
    </script>
</body>

</html>